package br.com.dev.tcc.view.sinistro.chain.atropelamento;

import android.content.Context;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import br.com.dev.tcc.R;
import br.com.dev.tcc.bean.Dependente;
import br.com.dev.tcc.bean.sinistro.Condutor;
import br.com.dev.tcc.bean.sinistro.Sinistro;
import br.com.dev.tcc.bean.sinistro.Terceiro;
import br.com.dev.tcc.singleton.SinistroSingleton;
import br.com.dev.tcc.util.CpfUtil;
import br.com.dev.tcc.view.dialog.DatePickerDialog;
import br.com.dev.tcc.view.dialog.DatePickerDialog.OnDatePickerListener;
import br.com.dev.tcc.view.sinistro.chain.SinistroChainItem;

public class SinistroAtropelamentoPasso1 extends SinistroChainItem {

	private View txtData;
	private EditText valueData;
	private Spinner spinnerCondutor;
	private EditText valueDescritivo;
	private View dividerCondutor;
	private View layoutDependente;
	private EditText valueCpfDependente;
	private View layoutTerceiro;
	private EditText valueNomeTerceiro;
	private EditText valueCpfTerceiro;
	private EditText valueTelefoneTerceiro;
	private DatePickerDialog dateDialog;

	public SinistroAtropelamentoPasso1(Context context) {
		super(context);
		inflateView(R.layout.sinistro_tipo_atropelamento1);
		SinistroSingleton.getInstance().setCondutor(Condutor.SEGURADO);
	}

	@Override
	public void init() {

		dateDialog = new DatePickerDialog(context, new OnDatePickerListener() {

			@Override
			public void onDateSelected(String date) {
				valueData.setText(date);
			}
		});

		OnClickListener showDataPicker = new OnClickListener() {
			@Override
			public void onClick(View v) {
				dateDialog.show();
			}
		};

		txtData = view.findViewById(R.id.txtData);
		txtData.setOnClickListener(showDataPicker);
		valueData = (EditText) view.findViewById(R.id.txtValorData);
		valueData.setOnClickListener(showDataPicker);

		spinnerCondutor = (Spinner) view.findViewById(R.id.spinnerCondutor);
		spinnerCondutor.setAdapter(new ArrayAdapter<Condutor>(context,
				R.layout.spinner_item, Condutor.values()));
		spinnerCondutor.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> a, View view,
					int position, long id) {

				Condutor selected = Condutor.values()[position];
				SinistroSingleton.getInstance().setCondutor(selected);

				if (selected.equals(Condutor.SEGURADO))
					dividerCondutor.setVisibility(View.GONE);
				else
					dividerCondutor.setVisibility(View.VISIBLE);

				if (selected.equals(Condutor.TERCEIRO))
					layoutTerceiro.setVisibility(View.VISIBLE);
				else
					layoutTerceiro.setVisibility(View.GONE);

				if (selected.equals(Condutor.DEPENDENTE))
					layoutDependente.setVisibility(View.VISIBLE);
				else
					layoutDependente.setVisibility(View.GONE);
			}

			@Override
			public void onNothingSelected(AdapterView<?> a) {
			}
		});

		valueDescritivo = (EditText) view.findViewById(R.id.txtValorDescritivo);
		valueDescritivo.setOnKeyListener(new OnKeyListener() {
			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				if (event.getAction() == KeyEvent.ACTION_UP
						&& keyCode == KeyEvent.KEYCODE_ENTER) {
					InputMethodManager imm = (InputMethodManager) context
							.getSystemService(Context.INPUT_METHOD_SERVICE);
					imm.hideSoftInputFromWindow(
							valueDescritivo.getWindowToken(), 0);
				}
				return true;
			}
		});

		dividerCondutor = view.findViewById(R.id.dividerCondutor);

		layoutDependente = view.findViewById(R.id.layoutDependente);
		valueCpfDependente = (EditText) view
				.findViewById(R.id.txtValorCpfDependente);

		layoutTerceiro = view.findViewById(R.id.layoutTerceiro);
		valueNomeTerceiro = (EditText) view
				.findViewById(R.id.txtValorNomeTerceiro);
		valueCpfTerceiro = (EditText) view
				.findViewById(R.id.txtValorCpfTerceiro);
		valueTelefoneTerceiro = (EditText) view
				.findViewById(R.id.txtValorTelTerceiro);
	}

	@Override
	public boolean isValid() {

		boolean isValid = true;

		if (valueDescritivo.getText().toString().trim().length() == 0) {

			valueDescritivo.setCompoundDrawablesWithIntrinsicBounds(null, null,
					context.getResources().getDrawable(R.drawable.exclamation),
					null);
			valueDescritivo.requestLayout();
			valueDescritivo.requestFocus();
			isValid = false;
		} else
			valueDescritivo.setCompoundDrawablesWithIntrinsicBounds(null, null,
					null, null);

		if (SinistroSingleton.getInstance().getCondutor()
				.equals(Condutor.TERCEIRO)) {

			if (valueTelefoneTerceiro.getText().toString().trim().length() < 8) {

				valueTelefoneTerceiro.setCompoundDrawablesWithIntrinsicBounds(
						null,
						null,
						context.getResources().getDrawable(
								R.drawable.exclamation), null);
				valueTelefoneTerceiro.requestLayout();
				valueTelefoneTerceiro.requestFocus();
				isValid = false;
			} else
				valueTelefoneTerceiro.setCompoundDrawablesWithIntrinsicBounds(
						null, null, null, null);

			if (!CpfUtil.isValid(context, valueCpfTerceiro)) {
				valueCpfTerceiro.requestLayout();
				valueCpfTerceiro.requestFocus();
				isValid = false;
			}

			if (valueNomeTerceiro.getText().toString().trim().length() == 0) {

				valueNomeTerceiro.setCompoundDrawablesWithIntrinsicBounds(
						null,
						null,
						context.getResources().getDrawable(
								R.drawable.exclamation), null);
				valueNomeTerceiro.requestLayout();
				valueNomeTerceiro.requestFocus();
				isValid = false;
			} else
				valueNomeTerceiro.setCompoundDrawablesWithIntrinsicBounds(null,
						null, null, null);
		}

		if (SinistroSingleton.getInstance().getCondutor()
				.equals(Condutor.DEPENDENTE)) {

			if (!CpfUtil.isValid(context, valueCpfDependente)) {
				valueCpfDependente.requestLayout();
				valueCpfDependente.requestFocus();
				isValid = false;
			}
		}

		if (valueData.getText().toString().trim().length() == 0) {

			valueData.setCompoundDrawablesWithIntrinsicBounds(null, null,
					context.getResources().getDrawable(R.drawable.exclamation),
					null);
			valueData.requestLayout();
			valueData.requestFocus();
			isValid = false;
		} else
			valueData.setCompoundDrawablesWithIntrinsicBounds(null, null, null,
					null);

		return isValid;
	}

	@Override
	public void setSinistroFields() {

		Sinistro sinistro = SinistroSingleton.getInstance();
		sinistro.setData(valueData.getText().toString());
		sinistro.setDescritivo(valueDescritivo.getText().toString());

		Condutor condutor = (Condutor) Condutor.values()[spinnerCondutor
				.getSelectedItemPosition()];
		sinistro.setCondutor(condutor);

		if (condutor.equals(Condutor.SEGURADO)) {

			sinistro.setTerceiro(null);
			sinistro.setDependente(null);
		} else if (condutor.equals(Condutor.TERCEIRO)) {

			Terceiro terceiro = new Terceiro();
			terceiro.setNome(valueNomeTerceiro.getText().toString());
			terceiro.setCpf(CpfUtil.getFormattedCpf(valueCpfTerceiro.getText()
					.toString()));
			terceiro.setTelefone(valueTelefoneTerceiro.getText().toString());
			sinistro.setTerceiro(terceiro);
			sinistro.setDependente(null);
		} else if (condutor.equals(Condutor.DEPENDENTE)) {

			Dependente dependente = new Dependente();
			dependente.setCpf(CpfUtil.getFormattedCpf(valueCpfDependente
					.getText().toString()));
			sinistro.setDependente(dependente);
			sinistro.setTerceiro(null);
		}
	}

	@Override
	public View getFirstView() {
		return txtData;
	}

	@Override
	public void onShow() {

		txtData.requestFocus();
		if (SinistroSingleton.getInstance().getCondutor()
				.equals(Condutor.TERCEIRO)) {
			layoutTerceiro.setVisibility(View.VISIBLE);
			dividerCondutor.setVisibility(View.VISIBLE);
		} else {
			layoutTerceiro.setVisibility(View.GONE);
			dividerCondutor.setVisibility(View.GONE);
		}

		if (SinistroSingleton.getInstance().getCondutor()
				.equals(Condutor.DEPENDENTE)) {
			layoutDependente.setVisibility(View.VISIBLE);
			dividerCondutor.setVisibility(View.VISIBLE);
		} else {
			layoutDependente.setVisibility(View.GONE);
			dividerCondutor.setVisibility(View.GONE);
		}
	}
}
